package com.skyd.core.android.game;

import android.graphics.Canvas;
import android.graphics.Rect;

/**
 * 支持多种状态显示的精灵，通用性较高
 * 
 * @author SkyD
 * 
 */
public class GameMultifunctionSpirit extends GamePixelImageSpirit implements IGameImageHolder {

	public GameMultifunctionSpirit() {

	}

	/**
	 * 初始值为new GameObjectList<GameSpiritState>(this)。 功能注释：状态列表
	 */
	private GameObjectList<GameSpiritState> _StateList = new GameObjectList<GameSpiritState>(this);

	/**
	 * 获取StateList。 功能注释：状态列表
	 * 
	 * @return 当前的GameObjectList<GameSpiritState>类型的值
	 */
	public GameObjectList<GameSpiritState> getStateList() {
		return _StateList;
	}

	/**
	 * 设置StateList。 功能注释：状态列表
	 * 
	 * @param value
	 *            要设置的GameObjectList<GameSpiritState>类型值
	 */
	public void setStateList(GameObjectList<GameSpiritState> value) {
		_StateList = value;
	}

	/**
	 * 设置StateList为其默认值(new GameObjectList<GameSpiritState>(this))。 功能注释：状态列表
	 */
	public void setStateListToDefault() {
		setStateList(new GameObjectList<GameSpiritState>(this));
	}

	/**
	 * 初始值为0。 功能注释：显示状态索引
	 */
	private int _DisplayStateIndex = 0;

	/**
	 * 获取DisplayStateIndex。 功能注释：显示状态索引
	 * 
	 * @return 当前的int类型的值
	 */
	public int getDisplayStateIndex() {
		return _DisplayStateIndex;
	}

	/**
	 * 设置DisplayStateIndex。 功能注释：显示状态索引
	 * 
	 * @param value
	 *            要设置的int类型值
	 */
	public void setDisplayStateIndex(int value) {
		_DisplayStateIndex = value;
	}

	/**
	 * 设置DisplayStateIndex为其默认值(0)。 功能注释：显示状态索引
	 */
	public void setDisplayStateIndexToDefault() {
		setDisplayStateIndex(0);
	}

	/**
	 * 通过名称查找状态，并将其设为当前状态，如果未找到则抛出异常
	 * 
	 * @param name
	 *            状态名称
	 * @throws Exception
	 *             未找到此名称的状态
	 */
	public void setDisplayStateName(String name) throws Exception {
		for (int i = 0; i < _StateList.size(); i++) {
			if (_StateList.get(i).getName() == name) {
				_DisplayStateIndex = i;
				return;
			}
		}
		throw new Exception("未找到名为" + name + "的精灵状态");
	}

	/**
	 * 获取当前显示的状态的名称
	 * 
	 * @return 当前显示的状态的名称
	 */
	public String getDisplayStateName() {
		return getDisplayState().getName();
	}

	/**
	 * 获取当前显示的状态
	 * 
	 * @return 当前显示的状态
	 */
	public GameSpiritState getDisplayState() {
		return _StateList.get(_DisplayStateIndex);
	}

	/**
	 * 更新状态
	 */
	@Override
	public void updateChilds() {
		if (_StateList.size() > 0)
			getDisplayState().update();
	}

	@Override
	protected void drawChilds(Canvas c, Rect drawArea) {
		if (_StateList.size() > 0)
			getDisplayState().draw(c, getDisplayRect());
	}

	@Override
	public GameObject getDisplayContentChild() {
		return getDisplayState();
	}

	@Override
	public GameImage getDisplayImage() {
		return getDisplayState().getDisplayImage();
	}

}
